package modelo.jugadores;

import java.util.Vector;

import modelo.equipo.Equipo;
import modelo.jugadores.datosDeUnJugador.DatosDeUnaFechaDeUnArquero;
import modelo.jugadores.datosDeUnJugador.DatosDeUnaFechaDeUnJugador;

import excepciones.ExcepcionNumeroDeFechaImposible;

public class Arquero extends JugadorConVayaInvicta{
	
	//METODOS CONSTANTES
	private static int PUNTAJE_POR_PENAL_ATAJADO = 3;
	
	//METODOS INTERNOS
	protected void crearYllenarLosDatosPorFechaDeUnJugador(){
		
		this.datosPorFechaDelJugador = new Vector<DatosDeUnaFechaDeUnJugador>(CANTIDAD_TOTAL_DE_FECHAS);
		
		for(int i = 0; i < CANTIDAD_TOTAL_DE_FECHAS; i++){
			
			this.datosPorFechaDelJugador.insertElementAt(new DatosDeUnaFechaDeUnArquero(), i);
			
		}
		
	}
	
	//METODOS PUBLICOS
	public Arquero(String unNombre, int unValorDeMercado){
		
		super(unNombre, unValorDeMercado);
	
		this.puntajePorGolAfavor = 6;
		
		this.puntajePorVayaInvicta = 2;
		
	}
	
	//*************************************************************************
	
	public void atajoCantidadDePenalesEnLaFecha(int unaCantidadDePenales, int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			this.corroborarSiEstaEnElRangoCorrectoLaFecha(unaFecha);
			
			DatosDeUnaFechaDeUnArquero unosDatosDeUnaFechaDelJugador;
			
			unosDatosDeUnaFechaDelJugador = (DatosDeUnaFechaDeUnArquero) this.datosPorFechaDelJugador.get(unaFecha - 1);

			unosDatosDeUnaFechaDelJugador.jugadorAtajoCantidadDePenales(unaCantidadDePenales);
					
			this.datosPorFechaDelJugador.insertElementAt(unosDatosDeUnaFechaDelJugador, unaFecha - 1);
			
		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
		
	}
	
	//*************************************************************************
	
	public int obtenerCantidadDePenalesAtajadosDeLaFecha(int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			this.corroborarSiEstaEnElRangoCorrectoLaFecha(unaFecha);
			
			return (((DatosDeUnaFechaDeUnArquero) this.datosPorFechaDelJugador.get(unaFecha - 1)).obtenerCantidadDePenalesAtajados());
			
		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
				
	}
	
	//*****************************************************************************
	
	public int obtenerPuntajeTotalDeLaFecha(int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			int puntajeFinal = super.obtenerPuntajeTotalDeLaFecha(unaFecha);
			
			return (puntajeFinal + (((DatosDeUnaFechaDeUnArquero) this.datosPorFechaDelJugador.get(unaFecha - 1)).obtenerCantidadDePenalesAtajados() * PUNTAJE_POR_PENAL_ATAJADO));
			
		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
		
	}
	
	//*************************************************************************
	
	public void agregateAlEquipo(Equipo unEquipo){
		
		unEquipo.agregarArquero(this);
		
	}
	
	//*************************************************************************
	
	public boolean quitateDelEquipo(Equipo unEquipo){
		
		return (unEquipo.quitarArquero(this));
		
	}
	
	//*************************************************************************
	
}
